package com.atguigu.gmall.seckill.service;

import com.atguigu.gmall.common.result.ResultCodeEnum;
import com.atguigu.gmall.order.entity.OrderInfo;
import com.atguigu.gmall.seckill.entity.SeckillGoods;

import java.util.List;

/**
 * @author lfy
 * @Description
 * @create 2022-10-25 9:09
 */
public interface SeckillBizService {

    /**
     * 查询当天需要参与秒杀的所有商品
     * @return
     */
    List<SeckillGoods> getCurrentDaySeckillGoods();


    /**
     * 当天商品保存到缓存中
     * @param goodsByDate
     * @param formatDate
     */
    void saveSeckillGoodToCache(List<SeckillGoods> goodsByDate, String formatDate);

    /**
     * 查询商品详情
     * @param skuId
     * @return
     */
    SeckillGoods getGoodsDetail(Long skuId);

    /**
     * 生成秒杀码：
     * 1、UUID； 随机值
     * 2、加密授权码；  一个用户在同一天购买同一个商品。码是确定生成的；
     * @param skuId
     * @return
     */
    String generateSeckillCode(Long skuId);


    /**
     * 计算秒杀码
     * @param formatDate
     * @param userId
     * @param skuId
     * @return
     */
    String computeCode(String formatDate, Long userId, Long skuId);

    /**
     * 秒杀排队
     * @param skuId
     * @param skuIdStr
     */
    void queue(Long skuId, String skuIdStr);

    /**
     * 秒单订单状态检查
     * @param skuId
     * @return
     */
    ResultCodeEnum checkOrder(Long skuId);

    /**
     * 获取秒杀单
     * @param skuId
     * @return
     */
    OrderInfo getSeckillOrder(Long skuId);

    /**
     * 根据创建出的订单重新修改redis中订单信息
     * @param orderInfo
     */
    void updateSeckillOrder(OrderInfo orderInfo);
}
